home *** CD-ROM | disk | FTP | other *** search
- 10 CLEAR,,,0,0,0:CLEAR,,,FRE(4)*.8!,,100000:DEF FONT"システム 12ドット":DEFINT A-Z
- 20 SCREEN 0:SCREEN@0:LINE(0,0)-(1023,19),PSET,%7,BF:BLB_MENUBAR_XLONG%=100
- 30 PALETTE 1,[112,32,176]:PALETTE 6,[192,192,192]:PALETTE 7,[112,112,112]
- 40 PALETTE 8,[32,32,32]:PALETTE 9,[176,128,224]:PALETTE 15,[255,255,255]
- 50 BLB_RESO_X=640:BLB_RESO_Y=480:GOSUB *BLB_WIN_INIT
- 60 FOR I=2 TO 9:READ W(I):NEXT:W$="Window Library v1.30"
- 70 *LOOP
- 75 LOCATE 0,0:PRINT USING "右クリックでウィンドウを開きます。(###/###)";LEN(BLB_WIN$);BLB_WIN_MAX
- 80 GOSUB *BLB_WIN_WORK
- 90 IF MOUSE(2,1) THEN W(0)=RND*320-30:W(1)=RND*300+24:GOSUB *BLB_WIN_OPEN:WHILE MOUSE(2,1):WEND
- 100 GOTO *LOOP
- 110 DATA 320,240,240,60,640,480,0,0
- 120 '
- 60400 '------------------- マウスカーソル形状設定 ver 1.60 一画面モード専用 --------------------------
- 60401 '入力 mousepat = マウスパターン番号
- 60402 ' (0=通常 1=時計 2=鉛筆 3=手 4=毛抜き 5=スポイト 6=指 7=筆 8=カッター)
- 60403 ' ( 負数はアイコン番号(絶対値)。絵柄については TOWNS GEARディクショナリ参照)
- 60404 ' ( ただし、負数を指定したときは読み取り位置の補正は行われない)
- 60405 *BLB_MOUSEPAT
- 60406 IF BLB_MOUSEPAT%=0 THEN DIM BLB_MA&(31),BLB_MD&(31):MOUSE 0:MOUSE 1,320,240,0:BLB_MOUSEPAT%=1
- 60407 MOUSE 3,0,INP(&H3B06):MOUSE 3,1,INP(&H3B06)
- 60408 IF MOUSEPAT<0 THEN *BLB_MOUSEPAT2
- 60409 FOR I%=0 TO 31:BLB_MA&(I%)=PEEK([264]&H2D080+I%*4+MOUSEPAT*256,4)
- 60410 BLB_MD&(I%)=BLB_MA&(I%) OR PEEK([264]&H2D000+MOUSEPAT*256+I%*4,4) XOR -1
- 60411 NEXT:MOUSE 1,,,1
- 60412 MOUSE 6,0,BLB_MA&,BLB_MD&,ASC(MID$("1?1:21111",MOUSEPAT+1))-48,ASC(MID$("1?1:L111N",MOUSEPAT+1))-48:RETURN
- 60413 *BLB_MOUSEPAT2
- 60414 FOR I%=0 TO 31:BLB_MA&(I%)=PEEK([264]&H27F80+I%*4-MOUSEPAT*256,4)
- 60415 BLB_MD&(I%)=(BLB_MA&(I%)XOR-1)AND(PEEK([264]&H27F00-MOUSEPAT*256+I%*4,4)XOR-1)
- 60416 NEXT:MOUSE 1,,,1:MOUSE 6,0,BLB_MA&,BLB_MD&,15,15:RETURN
- 60800 '-------------------- Windowライブラリ version 1.30 (16色画面用) ---------------------
- 60801 *BLB_WIN_INIT
- 60802 '入力 BLB_RESO_X ・・・ 画面解像度(横ドット数)
- 60803 ' BLB_RESO_Y ・・・ 画面解像度(縦ドット数)
- 60804 ' BLB_WIN_MAX ・・・ 最大ウィンドウ数(255未満・0のとき自動設定)
- 60805 VIEW(0,0)-(BLB_RESO_X-1,BLB_RESO_Y-1):WINDOW(0,0)-(BLB_RESO_X-1,BLB_RESO_Y-1)
- 60806 COLOR 7,0,7,4:CONSOLE 0,25,0:LINE(0,-(BLB_MENUBAR_XLONG%>0)*20)-(1023,767),PSET,%6,BF
- 60807 MOUSEPAT=0:GOSUB *BLB_MOUSEPAT
- 60808 BLB_WINMEM&=BLB_RESO_X*BLB_RESO_Y/4
- 60809 IF BLB_WIN_MAX=0 THEN BLB_WIN_MAX=((FRE(3)-200000)*.8!)\BLB_WINMEM&*2
- 60810 BLB_WIN$="":BLB_WIN_EXIST$=STRING$(BLB_WIN_MAX,"0")
- 60811 BLB_MEM%(0)=9:ERASE BLB_MEM%:BLB_WINPTN%(0)=0:ERASE BLB_WINPTN%
- 60812 DIM BLB_WIN%(BLB_WIN_MAX,9),BLB_WINTITLE$(BLB_WIN_MAX),BLB_MEM%(78000)
- 60813 DIM BLB_WINPTN%(BLB_WINMEM&*(BLB_WIN_MAX+1)-1)
- 60814 RETURN
- 60815 *BLB_WIN_POS
- 60816 IF BLB_WIN$="" THEN W=-1:RETURN
- 60817 FOR I%=1 TO LEN(BLB_WIN$):A%=ASC(MID$(BLB_WIN$,I%,1))-1
- 60818 IF X<BLB_WIN%(A%,0) OR X>=BLB_WIN%(A%,0)+BLB_WIN%(A%,2) OR Y<BLB_WIN%(A%,1) OR Y>=BLB_WIN%(A%,1)+BLB_WIN%(A%,3) THEN NEXT:W=-1:RETURN
- 60819 I%=256:NEXT:W=A%+1:GOSUB *BLB_WIN_WSET:X=X-W(0):Y=Y-W(1):RETURN
- 60820 *BLB_WIN_OPEN
- 60821 IF LEN(BLB_WIN$)=BLB_WIN_MAX THEN W=-1:RETURN
- 60822 W=INSTR(BLB_WIN_EXIST$,"0"):BLB_WIN$=CHR$(W)+BLB_WIN$
- 60823 FOR I%=0 TO 9:BLB_WIN%(W-1,I%)=W(I%):NEXT:BLB_WINTITLE$(W-1)=W$
- 60824 MID$(BLB_WIN_EXIST$,W,1)="1":GOSUB *BLB_WIN_DRAW:RETURN
- 60825 *BLB_WIN_CLOSE
- 60826 IF BLB_WIN$="" THEN RETURN
- 60827 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET
- 60828 BLB_V%(0)=W(0):BLB_V%(1)=W(1):BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
- 60829 GOSUB *BLB_WIN_BACKDRAW
- 60830 MID$(BLB_WIN_EXIST$,W,1)="0":BLB_WIN$=MID$(BLB_WIN$,2)
- 60831 RETURN
- 60832 *BLB_WIN_MOVE
- 60833 IF BLB_WIN$="" THEN RETURN
- 60834 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:BLB_WIN%(W-1,0)=X:BLB_WIN%(W-1,1)=Y
- 60835 GET@A(W(0),W(1))-(W(0)+W(2)-1,W(1)+W(3)-1),BLB_WINPTN%,BLB_WINMEM&*(W-1)
- 60836 IF W(0)<0 OR W(0)+W(2)>BLB_RESO_X OR W(1)+W(3)>BLB_RESO_Y THEN
- 60837 BLB_MEM%(0)=X:BLB_MEM%(1)=Y:FOR I%=0 TO 9:BLB_MEM%(I+2)=W(I%):NEXT
- 60838 GOSUB *BLB_WIN_DRAW:X=BLB_MEM%(0):Y=BLB_MEM%(1)
- 60839 FOR I%=0 TO 9:W(I%)=BLB_MEM%(I+2):NEXT
- 60840 ELSE
- 60841 PUT@A(X,Y)-(X+W(2)-1,Y+W(3)-1),BLB_WINPTN%,,,,,BLB_WINMEM&*(W-1)
- 60842 ENDIF
- 60843 BLB_V%(0)=W(0):BLB_V%(2)=W(0)+W(2)-1
- 60844 IF ABS(W(0)-X)>=W(2) OR ABS(W(1)-Y)>W(3)-2 THEN
- 60845 BLB_V%(1)=W(1):BLB_V%(3)=W(1)+W(3)-1:GOSUB *BLB_WIN_BACKDRAW
- 60846 ELSE
- 60847 FOR I%=0 TO 3:BLB_MEM%(I%)=W(I%):NEXT
- 60848 IF Y<W(1) THEN
- 60849 BLB_V%(1)=Y+W(3)-1:BLB_V%(3)=W(1)+W(3)-1:GOSUB *BLB_WIN_BACKDRAW
- 60850 ELSE IF Y>W(1) THEN
- 60851 BLB_V%(1)=W(1):BLB_V%(3)=Y:GOSUB *BLB_WIN_BACKDRAW
- 60852 ENDIF
- 60853 FOR I%=0 TO 3:W(I%)=BLB_MEM%(I%):NEXT
- 60854 IF Y<W(1) THEN BLB_V%(1)=W(1):BLB_V%(3)=Y+W(3)-1 ELSE BLB_V%(1)=Y:BLB_V%(3)=W(1)+W(3)-1
- 60855 IF X>W(0) THEN
- 60856 BLB_V%(0)=W(0):BLB_V%(2)=X:GOSUB *BLB_WIN_BACKDRAW
- 60857 ELSE IF X<W(0) THEN
- 60858 BLB_V%(0)=X+W(2)-1:BLB_V%(2)=W(0)+W(2)-1:GOSUB *BLB_WIN_BACKDRAW
- 60859 ENDIF
- 60860 ENDIF
- 60861 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),PSET,%8,B
- 60862 RETURN
- 60863 *BLB_WIN_SIZE
- 60864 IF BLB_WIN$="" THEN RETURN
- 60865 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:IF W(2)=X AND W(3)=Y THEN RETURN
- 60866 IF X<W(4) OR X>W(6) OR Y<W(5) OR Y>W(7) THEN RETURN
- 60867 BLB_WIN%(W-1,2)=X:BLB_WIN%(W-1,3)=Y:BLB_V%(0)=W(2):BLB_V%(1)=W(3):GOSUB *BLB_WIN_DRAW
- 60868 W(2)=BLB_V%(0):W(3)=BLB_V%(1):IF X>=W(2) AND Y>=W(3) THEN RETURN
- 60869 IF X>=W(2) AND Y<W(3) THEN
- 60870 BLB_V%(0)=W(0):BLB_V%(1)=W(1)+Y-1:BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
- 60871 ELSE IF X<W(2) AND Y>=W(3) THEN
- 60872 BLB_V%(0)=W(0)+X-1:BLB_V%(1)=W(1):BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
- 60873 ELSE IF X<W(2) AND Y<W(3) THEN
- 60874 BLB_V%(0)=W(0):BLB_V%(1)=W(1)+Y-1:BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
- 60875 A%=W(2):GOSUB *BLB_WIN_BACKDRAW
- 60876 BLB_V%(0)=W(0)+X-1:BLB_V%(1)=W(1):BLB_V%(2)=W(0)+A%-1:BLB_V%(3)=W(1)+Y-1
- 60877 ENDIF
- 60878 GOSUB *BLB_WIN_BACKDRAW:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),PSET,%8,B:RETURN
- 60879 *BLB_WIN_CHANGE
- 60880 IF BLB_WIN$="" THEN RETURN
- 60881 IF W<1 OR W>BLB_WIN_MAX OR W=ASC(BLB_WIN$) THEN RETURN
- 60882 I%=INSTR(BLB_WIN$,CHR$(W)):IF I%=0 THEN RETURN
- 60883 BLB_WIN$=CHR$(W)+LEFT$(BLB_WIN$,I%-1)+MID$(BLB_WIN$,I%+1)
- 60884 PUT@A(W(0),W(1))-(W(0)+W(2)-1,W(1)+W(3)-1),BLB_WINPTN%,,,,,BLB_WINMEM&*(W-1):RETURN
- 60885 *BLB_WIN_DRAW
- 60886 GOSUB *BLB_WIN_WSET
- 60887 MOUSE 1,,,0:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),PSET,%8,BF,7
- 60888 LINE(W(0),W(1))-STEP(W(2)-1,15),PSET,%8,BF
- 60889 LINE(W(0)+LEN(BLB_WINTITLE$(W-1))*6+40,W(1)+1)-(W(0)+W(2)-2,W(1)+14),PSET,1,BF
- 60890 CONNECT(W(0),W(1)+W(3)-2)-STEP(W(2)-3,0)-STEP(0,2-W(3))-STEP(1,0)-STEP(0,W(3)-2),%8
- 60891 SYMBOL(W(0)+24,W(1)+2),BLB_WINTITLE$(W-1),.75!,.75!,7
- 60892 IF (W(8) AND 2)=0 THEN
- 60893 LINE(W(0)+2,W(1)+2)-STEP(11,11),PSET,7,BF,%6
- 60894 LINE STEP(0,0)-STEP(-11,-11),PSET,7:LINE STEP(11,0)-STEP(-11,11),PSET,7
- 60895 ENDIF
- 60896 GOSUB *BLB_WIN_USERDRAW:GOSUB *BLB_WIN_GTOMEM:MOUSE 1,,,1:RETURN
- 60897 *BLB_WIN_BACKDRAW
- 60898 IF BLB_V%(0)<0 THEN IF BLB_V%(2)<1 THEN RETURN ELSE BLB_V%(0)=0
- 60899 IF BLB_V%(1)<0 THEN BLB_V%(1)=0 ELSE IF BLB_V%(1)>BLB_RESO_Y-2 THEN RETURN
- 60900 IF BLB_V%(0)>BLB_RESO_X-2 THEN RETURN
- 60901 IF BLB_V%(2)>BLB_RESO_X-2 THEN BLB_V%(2)=BLB_RESO_X-1
- 60902 IF BLB_V%(3)>BLB_RESO_Y-2 THEN BLB_V%(3)=BLB_RESO_Y-1
- 60903 MOUSE 1,,,0:VIEW(BLB_V%(0),BLB_V%(1))-(BLB_V%(2),BLB_V%(3)),%6
- 60904 WINDOW(BLB_V%(0),BLB_V%(1))-(BLB_V%(2),BLB_V%(3))
- 60905 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:I%=LEN(BLB_WIN$)
- 60906 WHILE I%>1:W=ASC(MID$(BLB_WIN$,I%,1))-1:I%=I%-1
- 60907 PUT@A(BLB_WIN%(W,0)-BLB_V%(0),BLB_WIN%(W,1)-BLB_V%(1))-(BLB_WIN%(W,0)+BLB_WIN%(W,2)-1-BLB_V%(0),BLB_WIN%(W,1)+BLB_WIN%(W,3)-1-BLB_V%(1)),BLB_WINPTN%,,,,,BLB_WINMEM&*W
- 60908 WEND
- 60909 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:VIEW:WINDOW:MOUSE 1,,,1:RETURN
- 60910 *BLB_WIN_WSET
- 60911 FOR I%=0 TO 9:W(I%)=BLB_WIN%(W-1,I%):NEXT:RETURN
- 60912 *BLB_WIN_GTOMEM
- 60913 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET
- 60914 GET@A(W(0),W(1))-(W(0)+W(2)-1,W(1)+W(3)-1),BLB_WINPTN%,BLB_WINMEM&*(W-1):RETURN
- 60915 *BLB_WIN_WORK
- 60916 IF MOUSE(2,0)=0 OR BLB_WIN$="" THEN RETURN
- 60917 X=MOUSE(0):Y=MOUSE(1):GOSUB *BLB_WIN_POS:IF W<0 THEN WHILE MOUSE(2,0):WEND:RETURN
- 60918 IF W<>ASC(BLB_WIN$) THEN GOSUB *BLB_WIN_CHANGE:RETURN
- 60919 IF X>W(2)-4 OR Y<16 OR Y>W(3)-3 THEN
- 60920 IF X>0 AND Y>1 AND X<13 AND Y<14 AND (W(8) AND 2)=0 THEN
- 60921 B%=0:WHILE MOUSE(2,0):X=MOUSE(0)-W(0):Y=MOUSE(1)-W(1)
- 60922 A%=(X>1)*(X<13)*(Y>1)*(Y<13)
- 60923 IF A%<>B% THEN LINE(W(0)+2,W(1)+2)-STEP(11,11),XOR,%7,BF:B%=A%
- 60924 WEND:IF B%=1 THEN GOSUB *BLB_WIN_CLOSE
- 60925 ELSE IF Y<16 AND (W(8)AND 1)=0 THEN
- 60926 MOUSEPAT=3:GOSUB *BLB_MOUSEPAT
- 60927 MOUSE 4,0,Y-(BLB_MENUBAR_XLONG%>0)*20,BLB_RESO_X-1,BLB_RESO_Y-9
- 60928 LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),XOR,%7,B
- 60929 C%=X:D%=Y:WHILE MOUSE(2,0):A%=MOUSE(0)-W(0):B%=MOUSE(1)-W(1)
- 60930 IF A%<>C% OR B%<>D% THEN
- 60931 LINE(W(0)-X+C%,W(1)-Y+D%)-STEP(W(2)-1,W(3)-1),XOR,%7,B:C%=A%:D%=B%
- 60932 LINE(W(0)-X+C%,W(1)-Y+D%)-STEP(W(2)-1,W(3)-1),XOR,%7,B
- 60933 ENDIF
- 60934 WEND:LINE(W(0)-X+C%,W(1)-Y+D%)-STEP(W(2)-1,W(3)-1),XOR,%7,B
- 60935 MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1
- 60936 IF X<>C% OR Y<>D% THEN X=W(0)-X+C%:Y=W(1)-Y+D%:GOSUB *BLB_WIN_MOVE
- 60937 ELSE IF (X>W(2)-4 OR Y>W(3)-3) AND (W(8) AND 4)=0 THEN
- 60938 A%=W(0)+W(4)+X-W(2)+1:B%=W(1)+W(5)+Y-W(3):C%=W(0)+W(6)+X-W(2):D%=W(1)+W(7)+Y-W(3)
- 60939 A%=-A%*(A%>=0):B%=-B%*(B%>=0):IF C%>BLB_RESO_X-2 THEN C%=BLB_RESO_X-1
- 60940 IF D%>BLB_RESO_Y-2 THEN D%=BLB_RESO_Y-1
- 60941 MOUSEPAT=4:GOSUB *BLB_MOUSEPAT:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),XOR,%7,B
- 60942 MOUSE 4,A%,B%,C%,D%:C%=X:D%=Y:WHILE MOUSE(2,0):A%=MOUSE(0)-W(0):B%=MOUSE(1)-W(1)
- 60943 IF A%<>C% OR B%<>D% THEN
- 60944 LINE(W(0),W(1))-STEP(W(2)-X+C%-1,W(3)-Y+D%-1),XOR,%7,B:C%=A%:D%=B%
- 60945 LINE(W(0),W(1))-STEP(W(2)-X+C%-1,W(3)-Y+D%-1),XOR,%7,B
- 60946 ENDIF
- 60947 WEND:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:LINE(W(0),W(1))-STEP(W(2)-X+C%-1,W(3)-Y+D%-1),XOR,%7,B
- 60948 MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1:X=W(2)-X+C%:Y=W(3)-Y+D%:GOSUB *BLB_WIN_SIZE
- 60949 ENDIF
- 60950 ELSE
- 60951 GOSUB *BLB_WIN_USER:WHILE MOUSE(2,0):WEND
- 60952 ENDIF
- 60953 RETURN
- 60954 *BLB_WIN_USER
- 60955 '┌───────────────────────────────────┐
- 60956 '│以下に、ウィンドウ内がマウスでクリックされた場合に行う処理を │
- 60957 '│記述してください。 │
- 60958 '│ウィンドウの座標は(W(0),W(1))~(W(0)+W(2)-1,W(1)+W(3)-1)です。 │
- 60959 '│ウィンドウについての情報は登録時と同じ形式で W() に収録されています。 │
- 60960 '└───────────────────────────────────┘
- 60980 RETURN
- 60981 *BLB_WIN_USERDRAW
- 60982 '┌───────────────────────────────────┐
- 60983 '│以下に、ウィンドウ内に描画するルーチンを記述してください。 │
- 60984 '│ウィンドウの座標は(W(0),W(1))~(W(0)+W(2)-1,W(1)+W(3)-1)です。 │
- 60985 '│ウィンドウについての情報は登録時と同じ形式で W() に収録されています。 │
- 60986 '│ (例) SYMBOL(W(0)+16,W(1)+32),STR$(W),3,3,3 │
- 60987 '└───────────────────────────────────┘
- 60988 LINE(W(0)+1,W(1)+16)-STEP(W(2)-5,W(3)-19),PSET,2
- 60989 LINE(W(0)+W(2)-4,W(1)+16)-STEP(5-W(2),W(3)-19),PSET,3
- 60990 SYMBOL(W(0)+8,W(1)+24),"ウィンドウの右端・下端の影の部分で",.75!,.75!,%8
- 60991 SYMBOL(W(0)+24,W(1)+40),"ウィンドウの大きさを変更できます。",.75!,.75!,%8
- 60999 RETURN
-